package com.china.produce.service.risk;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Optional;

/**
 * @ClassName
 * @Author niujie
 * @Version
 * @Description
 * @CreateTime 2023/7/22
 */
@Component
public class OpsRisk {

    /**
     * 抽象类返回是所有实现类
     * 有无参和有参构造，未加 @Autowired，使用无参构造
     * @param ops
     */
    public OpsRisk(List<OpsAbstractRisk> ops) {

        ops.stream().forEach(op -> {
            op.a();
        });
    }

    /**
     * 构造函数上有autowired直接执行，优于其他方法执行的autowired，构造函数执行在实列化时候，其他autowired要依靠autowiredAnnotationBeanPostProcessor
     */
    @Autowired
    public OpsRisk() {
        System.out.println("有autowired不执行上面有参构造");
    }

    /**
     * 获取抽象类、接口的实现类bean
     * @param opsRisk
     */
    @Autowired
    public void setOpsRisk(List<OpsAbstractRisk> opsRisk) {
        Optional<OpsAbstractRisk> any = opsRisk.stream().filter(item -> !(item instanceof OpsRiskSpecialService)).findAny();
        if(any.isPresent()) {
            OpsAbstractRisk opsAbstractRisk = any.get();
            System.out.println(opsAbstractRisk);
        }
    }
}
